package org.example.dto;

import java.time.LocalDateTime;

/**
 * 创建短链接响应DTO
 * 用于向前端返回创建短链接的结果
 * 包含成功/失败状态、生成的短链接信息等
 * 
 * @author Your Name
 * @since 2024-07-01
 */
public class CreateShortUrlResponse {
    
    /**
     * 是否成功，表示短链接创建操作的结果
     * true表示成功，false表示失败
     */
    private Boolean success;
    
    /**
     * 短链接编码，8位字符串
     * 例如：abc12345
     */
    private String shortCode;
    
    /**
     * 完整短链接，包含域名和短链接编码
     * 例如：http://localhost:8080/abc12345
     */
    private String shortUrl;
    
    /**
     * 原始长链接，用户输入的完整URL
     * 例如：https://www.example.com/very-long-url
     */
    private String originalUrl;
    
    /**
     * 过期时间，可能为null表示永不过期
     * 用于告诉用户短链接的有效期
     */
    private LocalDateTime expireTime;
    
    /**
     * 响应消息，描述操作结果
     * 成功时显示"短链接生成成功"，失败时显示错误原因
     */
    private String message;
    
    // ==================== 构造函数 ====================
    
    /**
     * 无参构造函数
     * 用于JSON序列化和框架创建对象
     */
    public CreateShortUrlResponse() {}
    
    /**
     * 失败响应构造函数
     * 用于创建表示失败的响应对象
     * 
     * @param success 成功标志，应该为false
     * @param message 错误消息
     */
    public CreateShortUrlResponse(Boolean success, String message) {
        this.success = success;
        this.message = message;
    }
    
    /**
     * 成功响应构造函数
     * 用于创建表示成功的响应对象
     * 
     * @param success 成功标志，应该为true
     * @param shortCode 生成的短链接编码
     * @param shortUrl 完整的短链接URL
     * @param originalUrl 原始长链接
     * @param expireTime 过期时间
     */
    public CreateShortUrlResponse(Boolean success, String shortCode, String shortUrl, String originalUrl, LocalDateTime expireTime) {
        this.success = success;
        this.shortCode = shortCode;
        this.shortUrl = shortUrl;
        this.originalUrl = originalUrl;
        this.expireTime = expireTime;
        // 设置成功消息
        this.message = "短链接生成成功";
    }
    
    // ==================== Getter和Setter方法 ====================
    
    /**
     * 获取成功标志
     * @return 是否成功
     */
    public Boolean getSuccess() {
        return success;
    }
    
    /**
     * 设置成功标志
     * @param success 是否成功
     */
    public void setSuccess(Boolean success) {
        this.success = success;
    }
    
    /**
     * 获取短链接编码
     * @return 短链接编码
     */
    public String getShortCode() {
        return shortCode;
    }
    
    /**
     * 设置短链接编码
     * @param shortCode 短链接编码
     */
    public void setShortCode(String shortCode) {
        this.shortCode = shortCode;
    }
    
    /**
     * 获取完整短链接URL
     * @return 完整短链接URL
     */
    public String getShortUrl() {
        return shortUrl;
    }
    
    /**
     * 设置完整短链接URL
     * @param shortUrl 完整短链接URL
     */
    public void setShortUrl(String shortUrl) {
        this.shortUrl = shortUrl;
    }
    
    /**
     * 获取原始长链接
     * @return 原始长链接
     */
    public String getOriginalUrl() {
        return originalUrl;
    }
    
    /**
     * 设置原始长链接
     * @param originalUrl 原始长链接
     */
    public void setOriginalUrl(String originalUrl) {
        this.originalUrl = originalUrl;
    }
    
    /**
     * 获取过期时间
     * @return 过期时间，可能为null
     */
    public LocalDateTime getExpireTime() {
        return expireTime;
    }
    
    /**
     * 设置过期时间
     * @param expireTime 过期时间
     */
    public void setExpireTime(LocalDateTime expireTime) {
        this.expireTime = expireTime;
    }
    
    /**
     * 获取响应消息
     * @return 响应消息
     */
    public String getMessage() {
        return message;
    }
    
    /**
     * 设置响应消息
     * @param message 响应消息
     */
    public void setMessage(String message) {
        this.message = message;
    }
}
